package tp.view;

import tp.controller.Controlador;
import tp.model.Nave;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import java.util.Observable;
import java.util.Observer;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;

/**
 * Esta es la clase que representa a la vista del misil
 * 
 * @author Dr Von Nostrum
 * 
 */
public class NaveView extends Component implements Observer {

	private Graphics g;

	public Nave miNave;

	public BufferedImage naveImage;

	protected String[] spriteNames;

	protected int currentFrame;

	private int height;

	private int width;

	public NaveView(Nave unaNave) {
		unaNave.addObserver(this);
		miNave = unaNave;
		g = this.getGraphics();
		setSpriteNames(new String[] { "Nave.jpg" });
		currentFrame = 0;
	}

	private void checkOffscreenImage() {
		Dimension d = CopyOfBoardView1.panel.getSize();// Dimension d =
														// getSize();
		InputStream in = getClass().getResourceAsStream("nave.jpg");
		JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
		try {
			naveImage = decoder.decodeAsBufferedImage();
			in.close();
		} catch (Exception ex) {

		}

	}

	public void paint(Graphics g) {
		// Dimension d = this.getParent().getSize();
		Dimension d = CopyOfBoardView1.panel.getSize();
		// checkOffscreenImage();
		// Graphics offG = misilImage.getGraphics();
		// offG.setColor(Color.GRAY);// getBackground());
		// offG.drawImage(misilImage, 0, 0, d.width, d.height, null);
		// offG.fillRect(0, 0, d.width, d.height);

		// Dibujo la imagen propieamente dicha.
		// paintOffscreen(naveImage.getGraphics());

		// Renderizo la imagen finalmente en la pantalla.

		// g.drawImage(misilImage,
		// misil.getMiPosicion().getXInt()-(int)misil.getMiAncho()/2, d.height -
		// misil.getMiPosicion().getYInt()-(int)misil.getMiAltura()/2,(int)misil.getMiAncho()-misil.getBola().getMiRadio(),(int)misil.getMiAltura(),
		// null);
		
		g.drawImage(Controlador.spriteCache
				.getSprite(spriteNames[currentFrame]), miNave.getMiPosicion()
				.getXInt()
				- (int) miNave.getMiAncho() / 2 + (int) miNave.getMiRadio(),
				d.height - miNave.getMiPosicion().getYInt()
						+ (int) miNave.getMiAltura() / 2, (int) miNave
						.getMiAncho()
						- 2 * (int) miNave.getMiRadio(), -((int) miNave
						.getMiAltura() - (int) miNave.getMiRadio()), null);

	}

	/*
	 * public void paintOffscreen(Graphics g) { Dimension d =
	 * CopyOfBoardView1.panel.getSize(); if (miNave.isVivo()){
	 * g.drawImage(naveImage,miNave.getMiPosicion().getXInt() -
	 * (int)miNave.getMiAncho()/2+ (int)miNave.getMiRadio(), d.height -
	 * miNave.getMiPosicion().getYInt() + (int)miNave.getMiAltura()/2,
	 * (int)miNave.getMiAncho()-
	 * 2*(int)miNave.getMiRadio(),-((int)miNave.getMiAltura() -
	 * (int)miNave.getMiRadio()),null); } }
	 */

	public void setSpriteNames(String[] names) {
		spriteNames = names;
		height = 0;
		width = 0;
		for (int i = 0; i < names.length; i++) {
			BufferedImage image = Controlador.spriteCache
					.getSprite(spriteNames[i]);
			height = Math.max(height, image.getHeight());
			width = Math.max(width, image.getWidth());
		}
	}

	public void update(Observable unMisil, Object arg1) {
		if (miNave != null) {
			if (miNave.getMiPosicion() != null) {
				g = this.getGraphics();
				Dimension d = this.getParent().getSize();
				g.setColor(Color.BLUE);
				g.fillOval(miNave.getMiPosicion().getXInt()
						- (int) miNave.getMiRadio(), d.height
						- miNave.getMiPosicion().getYInt()
						- (int) miNave.getMiRadio(),
						(int) miNave.getMiRadio() * 2, (int) miNave
								.getMiRadio() * 2);
			} else {
				miNave = null;
			}
		}
	}
}
